package com.yc.service.Impl;

import com.yc.service.BrowsingHistoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * 如果用户未登陆,则再浏览器中存LocalSession,如果登陆了,则再把LocalSession存到Redis中
 */
@Service
public class BrowsingHistoryServiceImpl implements BrowsingHistoryService {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    // 定义 Redis 键的前缀
    private static final String HISTORY_KEY_PREFIX = "userHistory:";
    @Override
    public boolean addBrowsingHistory(String userId, Integer fid) {
        String key = HISTORY_KEY_PREFIX + userId;
        try {
            // 执行 leftPush 操作并获取新长度
            Long newLength = redisTemplate.opsForList().leftPush(key, String.valueOf(fid));
            // 保持历史记录的数量，限制为 5 条
            redisTemplate.opsForList().trim(key, 0, 4);
           // 设置键的过期时间，例如设置为 1天
            redisTemplate.expire(key, 1, TimeUnit.DAYS);
            // 检查 newLength 是否为非负数，表示操作成功
            return newLength != null && newLength >= 0;
        } catch (Exception e) {
            // 记录异常并返回失败
            e.printStackTrace();
            return false;
        }
    }


    @Override
    // 获取浏览记录
    public List<String> getBrowsingHistory(String userId) {
        //根据用户的id来获取键
        String key = HISTORY_KEY_PREFIX + userId;
        //获取从0开始到结束的所有值
        return redisTemplate.opsForList().range(key, 0, -1);
    }
}
